Итак, мы с Вами умеем создавать фильтр и добавлять его к IIS. В тот момент когда мы добавляем фильтр к IIS вызывается функция GetFilterVersion.
BOOL WINAPI GetFilterVersion ( PHTTP_FILTER_VERSION pVer // структура с информацией для сервера );
Эта функция вызывается только один раз в момент запуска сервера. В виду такого ее поведения она подходит для инициализации данных, если они нужны. Ну, например, сколько раз производилось обработка запроса фильтром за сеанс работы. Сервер хранит набор фильтров. Наверно есть массив :-))) ответственный за хранения фильтров и информации от них. И наверно когда добавляется новый фильтр выделяется новая ячейка. А вот чтобы заполнить ее информацией сервер просто передает Вам указатель на структуру HTTP_FILTER_VERSION, чтобы Вы могли ее заполнить сами. Структура эта такая:
typedef struct _HTTP_FILTER_VERSION
{
DWORD dwServerFilterVersion; // Версия сервера Данные передаются заполненные !!!
DWORD dwFilterVersion; // версия фильтра
CHAR lpszFilterDesc[SF_MAX_FILTER_DESC_LEN+1]; // короткое описание
DWORD dwFlags; // приоритет фильтра
} HTTP_FILTER_VERSION, *PHTTP_FILTER_VERSION;
Наш волшебник уже создал класс на основе класса CHttpFilter, который уже фильтр. И функцию GetFilterVersion уже создал, давайте посмотрим.
BOOL CMyFilterFilter::GetFilterVersion(PHTTP_FILTER_VERSION pVer)
{
// Вызываем инициализацию по молчанию
CHttpFilter::GetFilterVersion(pVer);
// Очишаем набор флагов базавого класса
pVer->dwFlags &= ~SF_NOTIFY_ORDER_MASK;
// Устанавливаем флаги
pVer->dwFlags |= SF_NOTIFY_ORDER_HIGH | SF_NOTIFY_SECURE_PORT |
SF_NOTIFY_NONSECURE_PORT | SF_NOTIFY_END_OF_NET_SESSION;
// Читаем строку описания и передаем в структуру
TCHAR sz[SF_MAX_FILTER_DESC_LEN+1];
ISAPIVERIFY(::LoadString(AfxGetResourceHandle(),
IDS_FILTER, sz, SF_MAX_FILTER_DESC_LEN));
_tcscpy(pVer->lpszFilterDesc, sz);
return TRUE;
}
Кроме приоритетов мы должны так же указать серверу о каких событиях передавать уведомления. Вот эти флаги:
Эти флаги можно установить вручную, а можно воспользоваться вторым шагом в волшебнике. Вот смотрите, здесь вы устанавливаете уведомления.
